home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-04
/
dm3_src.zip
/
DMBBS.C
< prev
next >
Wrap
C/C++ Source or Header
|
1990-08-02
|
95KB
|
3,164 lines
/* ************************************************************************* */
/* */
/* D O O R W A R E B B S F I L E I N T E R F A C E */
/* */
/* For Mycrosoft & Turbo C */
/* */
/* ************************************************************************* */
/* */
/* This module contains functions used to input access information */
/* from the RBBS files. */
/* */
/* The following funtions are contained in this file: */
/* */
/* read_bbs_info - Read the BBS files */
/* rbbs_read - Read the RBBS files (16.x +) */
/* pcbbs_read - Read the PC-Board files (12.1) */
/* pcbbs2_read - Read the PC-Board files (14.0) */
/* wcbbs_read - Read the Wildcat files */
/* qbbs_read - Read the Quick BBS files */
/* gbbs_read - Read the GAP BBS files */
/* wbbs_read - Read the WWIV BBS files */
/* page_operator - Page local operator */
/* chat_mode - Chat between remote & local */
/* */
/* */
/* ************************************************************************* */
/* ************************************************************************* */
/* PROGRAM HISTORY */
/* ************************************************************************* */
/* 06/20/87 Version 1.00 */
/* 06/14/88 Version 1.10 */
/* Added Quick BBS support */
/* */
/* */
/* ************************************************************************* */
#include "dmcfg.h" /* Std. defines & includes */
#include "dmdata.h" /* Std DM storage */
static char nodeid[37][2] = { "0",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"A",
"B",
"C",
"D",
"E",
"F",
"G",
"H",
"I",
"J",
"K",
"L",
"M",
"N",
"O",
"P",
"Q",
"R",
"S",
"T",
"U",
"V",
"W",
"X",
"Y",
"Z" };
/******************************************************************************
*
* READ_BBS_INFO - Read user infor from BBS files
*
* process 1. If running local, exit
* 2. Open the comm port
* 3. Exit if error
* 4. Read appropriate bbs files
* 5. Exit if bad read
* 6. Exit
* input Node = -1 if local
* Else node = BBS node number
* path = Path to BBS files
* = "" if running under RBBS Door Monitor
* type = "RBBS" if RBBS 16.x, 17.x
* = "QBBS" if Quick BBS
* = "PCBOARD" if PC-Board 12.1
* = "PCBOARD14" if PC-Board 14.0
* = "WILDCAT" if Wildcat
* = "GAP" if GAP BBS
* = "WWIV" if WWIV BBS
* = "SPITFIRE if Spitfire BBS (door)
* = "SPITFIREK if Spitfire BBS (Main menu user command)
* = "SPITFIREM if Spitfire BBS (Msg. menu user command)
* = "SPITFIREF if Spitfire BBS (File menu user command)
* output Returns 0 if all ok
* ===== Comm Port Return Codes =====
* Returns -1 if can't open node file NODES.BBS
* Returns -2 if illegal node number in NODES.BBS
* Returns -3 if illegal port name in NODES.BBS
* Returns -4 if illegal number of parameters in PORTS.BBS
* Returns -5 if illegal comm port id in PORTS.BBS
* Returns -6 if illegal comm port address in PORTS.BBS
* Returns -7 if illegal IRQ number in PORTS.BBS
* Returns -8 if illegal INT enable in PORTS.BBS
* Returns -9 if illegal handshake in PORTS.BBS
* Returns -10 if illegal passthrough in PORTS.BBS
* Returns -11 if Duplicate comm port definition in PORTS.BBS
* Returns -12 if No defined port ids in PORTS.BBS
* Returns -13 if Port is not defined in PORTS.BBS
* ===== RBBS 16.x Return Codes =====
* Returns -21 if can't find MESSAGES file
* Returns -22 if can't read node record
* Returns -23 if can't find DORINFOx files
* Returns -24 if can't read user record
* ===== PC-Board Return Codes =====
* Returns -31 if can't find PCBOARD.SYS info
* Returns -32 if can't read PCBOARD.SYS info
* ===== Wildcat Return Codes =====
* Returns -41 if can't find CALLINFO.BBS info
* Returns -42 if can't read CALLINFO.BBS info
* ===== QBBS Return Codes =====
* Returns -51 if can't find DORINFOx.DEF info
* Returns -52 if can't read DORINFOx.DEF info
* ===== GAP BBS Return Codes =====
* Returns -61 if can't find DOOR.SYS info
* Returns -62 if can't read DOOR.SYS info
* ===== WWIV BBS Return Codes =====
* Returns -71 if can't find CHAIN.TXT info
* Returns -72 if can't read CHAIN.TXT info
* ===== SPITFIRE BBS Return Codes =====
* Returns -81 if can't find SFDOORS.DAT info
* Returns -82 if can't read SFDOORS.DAT info
* Returns -83 if can't find SFMAIN.DAT info
* Returns -84 if can't read SFMAIN.DAT info
* Returns -85 if can't find SFMESS.DAT info
* Returns -86 if can't read SFMESS.DAT info
* Returns -87 if can't find SFFILE.DAT info
* Returns -88 if can't read SFFILE.DAT info
* ===== Door Monitor Return Codes =====
* Returns -101 if can't find TIMEOFFx.DOR
* Returns -102 if can't find or read NAMES.DOR
* ===== Misc Return Codes =====
* Returns 1 if bad type parameter
*****************************************************************************/
read_bbs_info(node, path, type)
int node; /* BBS node number */
char *path; /* Path to BBS files */
char *type; /* BBS identifier */
{
int i;
/*
* Store incomming parms
*/
if(node != -1)
{
user_node = node; /* Save node number */
if(strlen(path)) /* If BBS path specified */
{
strcpy(bbs_dir, path); /* ...copy it over */
if(bbs_dir[strlen(bbs_dir) - 1] != '\\') /* ...if not terminated... */
strcat(bbs_dir, "\\"); /* ......then fix it */
}
else
{
strcpy(bbs_dir, "\0"); /* MWB - running from MON */
}
}
/*
* Open Remote Stream
*/
if(node == -1)
remote_user = 0;
else
{
i = io_open(node);
if(i)
return(i);
}
/*
* Initialize Local Variables
*/
srand(rnd_clock()); /* Set random seed based on clock value */
/*
* Setup player information
*/
if(remote_user)
{
if(strlen(path))
{
/* Read BBS Files */
if(strlen(type))
{
if(strcmp(strupr(type), "SPITFIRE") == 0)
{
i = sfbbs_read(node, "SFDOORS.DAT");
if(i)
return(i - 80);
}
else if(strcmp(strupr(type), "SPITFIREK") == 0)
{
i = sfbbs_read(node, "SFMAIN.DAT");
if(i)
return(i - 82);
}
else if(strcmp(strupr(type), "SPITFIREM") == 0)
{
i = sfbbs_read(node, "SFMESS.DAT");
if(i)
return(i - 84);
}
else if(strcmp(strupr(type), "SPITFIREF") == 0)
{
i = sfbbs_read(node, "SFFILE.DAT");
if(i)
return(i - 86);
}
else if(strcmp(strupr(type), "WWIV") == 0)
{
i = wbbs_read(node);
if(i)
return(i - 70);
}
else if(strcmp(strupr(type), "GAP") == 0)
{
i = gbbs_read(node);
if(i)
return(i - 60);
}
else if(strcmp(strupr(type), "QBBS") == 0)
{
i = qbbs_read(node);
if(i)
return(i - 50);
}
else if(strcmp(strupr(type), "WILDCAT") == 0)
{
i = wcbbs_read(node);
if(i)
return(i - 40);
}
else if(strcmp(strupr(type), "PCBOARD14") == 0)
{
i = pcbbs2_read(node);
if(i)
return(i - 30);
}
else if(strcmp(strupr(type), "PCBOARD") == 0)
{
i = pcbbs_read(node);
if(i)
return(i - 30);
}
else if(strcmp(strupr(type), "RBBS") == 0)
{
/* i = rbbs_read(node); */
i = qbbs_read(node);
if(i)
return(i - 20);
}
}
else
return(1);
if(bbs_node_info.snoop[1] != '1')
{
local_cls();
no_cursor();
}
}
else
{
/* Read Monitor Files */
i = mon_read(node);
if(i)
return(100 - i);
i = mon_player(user_name, mon_user);
if(i)
return(101 - i);
}
}
return(0);
}
/******************************************************************************
*
* RBBS_READ - Read user infor from BBS files
*
* process 1. If running local, exit
* 2. Open MESSAGES file
* 3. Exit if not found
* 4. Read appropriate node record
* 5. Exit if bad read
* 6. Store users name
* 7. Store logon time
* 8. Close file
* 9. Open DORINFOx file
* 10. Exit if not found
* 11. Read user information
* 12. Close file
* 13. Store security level
* 14. Store graphics type
* 15. Store nulls flag
* 16. Store caps flag
* 17. Store page length
* 18. Store used time
* 19. Store timelimit
* 20. Exit
* input Node = -1 if no parameters
* Else node = BBS node number
* output Returns 0 if all ok
* Returns -1 if can't find MESSAGES file
* Returns -2 if can't read node record
* Returns -3 if can't find DORINFOx files
* Returns -4 if can't read user record
*****************************************************************************/
rbbs_read(node)
int node; /* BBS node number */
{
long lseek();
long cvt_time(); /* Convert time string */
long cur_time(); /* Get current time */
FS rfd; /* File control block */
long foffset; /* File offset */
int i, j, k; /* Work variables */
char string_data[80]; /* Work space */
/*
* Exit if local only
*/
if(remote_user == 0) /* If remote not active... */
return(0); /* ...exit all ok */
/*
* Open MESSAGES file
*/
strcpy(rfd.name, bbs_dir); /* Build the filename */
strcat(rfd.name, "MESSAGES");
i = file_open(&rfd, FREAD, FBINARY, FNOCREATE); /* Open MESSAGES */
if(i) /* If file not found... */
return(-1); /* ...exit with error */
/*
* Read appropriate node record
*/
if(node == 0)
foffset = 128L; /* Calc location of node rec */
else
foffset = node * 128L; /* Calc location of node rec */
lseek(rfd.fh, foffset, 0); /* Seek the location */
if(read(rfd.fh, &bbs_node_info, 128) != 128) /* If bad read... */
return(-2); /* ...error */
if(strcmp(bbs_node_info.sysop, "-1") == 0)
remote_user = 0;
/*
* Close file
*/
file_close(&rfd); /* Close it */
/*
* Open DORINFOx file
*/
strcpy(rfd.name, bbs_dir); /* Build the filename */
strcat(rfd.name, "DORINFO");
strcat(rfd.name, nodeid[node]);
strcat(rfd.name, ".DEF");
i = file_open(&rfd, FREAD, FBINARY, FNOCREATE); /* Open USERS */
if(i) /* If file not found... */
return(-3); /* ...exit with error */
/*
* Read in the user info
*/
for(i = 0 ; i < 12 ; i++) /* Read each line in */
{
if(fgets(ascii_user_info[i], 128, rfd.fd) == NULL) /* If bad read... */
{
file_close(&rfd);
return(-4);
}
}
/*
* Close file
*/
file_close(&rfd); /* close it */
/*
* Store users name
*/
i = 0;
while((i < 31) && (ascii_user_info[6][i] != 0x0d) &&
(ascii_user_info[6][i] != 0x0a) && (ascii_user_info[6][i] != 0x00))
{
bbs_user_info.name[i] = ascii_user_info[6][i];
user_name[i] = ascii_user_info[6][i];
i++;
}
if(i < 31)
{
bbs_user_info.name[i] = ' ';
user_name[i] = ' ';
i++;
}
j = 0;
while((i < 31) && (ascii_user_info[7][j] != 0x0d) &&
(ascii_user_info[7][j] != 0x0a) && (ascii_user_info[7][j] != 0x00))
{
bbs_user_info.name[i] = ascii_user_info[7][j];
user_name[i] = ascii_user_info[7][j];
i++;
j++;
}
while(i < 31)
{
bbs_user_info.name[i] = ' ';
user_name[i] = ' ';
i++;
}
user_name[i] = 0x00;
/*
* Store security level
*/
bbs_user_info.security = atoi(ascii_user_info[10]);
user_security = bbs_user_info.security;
/*
* Store graphics type
*/
user_graphics = atoi(ascii_user_info[9]);
/*
* Store nulls flag
*/
user_nulls = 0;
/*
* Store caps flag
*/
user_caps = 0;
/*
* Store page length
*/
user_page = 23;
/*
* Compute effective login
*/
user_start = cur_time(); /* Remeber when we started */
user_signon = cur_time();
/*
* Store timelimit
*/
user_signoff = atoi(ascii_user_info[11]) * 60L; /* Compute logoff */
user_signoff += user_signon;
/*
* Test for local node
*/
if(strnicmp(ascii_user_info[3], "COM0", 4) == 0)
remote_user = 0;
/*
* Exit
*/
return(0); /* Exit all ok */
}
/******************************************************************************
*
* QBBS_READ - Read user infor from BBS files
*
* process 1. If running local, exit
* 2. Set default node configuration
* 3. Open DORINFOx file
* 4. Exit if not found
* 5. Read user information
* 6. Close file
* 7. Store security level
* 8. Store graphics type
* 9. Store nulls flag
* 10. Store caps flag
* 11. Store page length
* 12. Store used time
* 13. Store timelimit
* 14. Exit
* input Node = -1 if no parameters
* Else node = BBS node number
* output Returns 0 if all ok
* Returns -1 if can't find DORINFOx files
* Returns -2 if can't read user record
*****************************************************************************/
qbbs_read(node)
int node; /* BBS node number */
{
long cvt_time(); /* Convert time string */
long cur_time(); /* Get current time */
FS rfd; /* File control block */
long foffset; /* File offset */
int i, j, k; /* Work variables */
char string_data[80]; /* Work space */
/*
* Exit if local only
*/
if(remote_user == 0) /* If remote not active... */
return(0); /* ...exit all ok */
/*
* Open DORINFOx file
*/
strcpy(rfd.name, bbs_dir); /* Build the filename */
strcat(rfd.name, "DORINFO");
strcat(rfd.name, nodeid[node]);
strcat(rfd.name, ".DEF");
i = file_open(&rfd, FREAD, FBINARY, FNOCREATE); /* Open USERS */
if(i) /* If file not found... */
return(-1); /* ...exit with error */
/*
* Read in the user info
*/
for(i = 0 ; i < 12 ; i++) /* Read each line in */
{
if(fgets(ascii_user_info[i], 128, rfd.fd) == NULL) /* If bad read... */
{
file_close(&rfd);
return(-2);
}
}
/*
* Close file
*/
file_close(&rfd); /* close it */
/*
* Set bbs node parameters to defaults
*/
bbs_node_info.snoop[0] = '-';
bbs_node_info.snoop[1] = '1';
bbs_node_info.line_printer[0] = ' ';
bbs_node_info.line_printer[1] = '0';
bbs_node_info.sysop_avail[0] = '-';
bbs_node_info.sysop_avail[1] = '1';
bbs_user_info.options.bit_flags = BBS_OPTION_BELL;
bbs_node_info.sysop_next[0] = ' ';
bbs_node_info.sysop_next[1] = '0';
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '3';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '3';
bbs_node_info.sysop_annoy[0] = ' ';
bbs_node_info.sysop_annoy[1] = '0';
bbs_node_info.doors_avail[0] = '-';
bbs_node_info.doors_avail[1] = '1';
bbs_node_info.eight_bits[0] = '-';
bbs_node_info.eight_bits[1] = '1';
bbs_node_info.upper_case[0] = ' ';
bbs_node_info.upper_case[1] = '0';
bbs_node_info.reserve_1[0] = ' ';
bbs_node_info.reserve_1[1] = ' ';
bbs_node_info.reserve_1[2] = ' ';
bbs_node_info.reserve_1[3] = ' ';
bbs_node_info.reserve_1[4] = ' ';
bbs_node_info.sysop[0] = ' ';
bbs_node_info.sysop[1] = '0';
bbs_node_info.active[0] = 'A';
bbs_node_info.reserved_2[0] = ' ';
bbs_node_info.reserved_2[1] = ' ';
bbs_node_info.reserved_3[0] = ' ';
bbs_node_info.reserved_3[1] = ' ';
bbs_node_info.reserved_3[2] = ' ';
bbs_node_info.private_door[0] = ' ';
bbs_node_info.private_door[1] = '0';
bbs_node_info.transfer[0] = ' ';
bbs_node_info.transfer[1] = ' ';
strncpy(bbs_node_info.daily_exit_date, "01-01-1987", 10);
strncpy(bbs_node_info.daily_exit_time, "01:00", 5);
bbs_node_info.reliable[0] = '-';
bbs_node_info.reliable[1] = '1';
for(i = 0 ; i < 36 ; i++)
bbs_node_info.reserved_4[i] = ' ';
/*
* Store users name
*/
i = 0;
while((i < 31) && (ascii_user_info[6][i] != 0x0d) &&
(ascii_user_info[6][i] != 0x0a) && (ascii_user_info[6][i] != 0x00))
{
bbs_user_info.name[i] = ascii_user_info[6][i];
user_name[i] = ascii_user_info[6][i];
i++;
}
if(i < 31)
{
bbs_user_info.name[i] = ' ';
user_name[i] = ' ';
i++;
}
j = 0;
while((i < 31) && (ascii_user_info[7][j] != 0x0d) &&
(ascii_user_info[7][j] != 0x0a) && (ascii_user_info[7][j] != 0x00))
{
bbs_user_info.name[i] = ascii_user_info[7][j];
user_name[i] = ascii_user_info[7][j];
i++;
j++;
}
while(i < 31)
{
bbs_user_info.name[i] = ' ';
user_name[i] = ' ';
i++;
}
user_name[i] = 0x00;
/*
* Store security level
*/
bbs_user_info.security = atoi(ascii_user_info[10]);
user_security = bbs_user_info.security;
/*
* Store graphics type
*/
bbs_user_info.options.graphics[0] = ascii_user_info[9][0];
string_data[0] = bbs_user_info.options.graphics[0]; /* Convert to number */
string_data[1] = '\0';
user_graphics = atoi(string_data);
/*
* Store nulls flag
*/
user_nulls = 0;
/*
* Store caps flag
*/
user_caps = 0;
/*
* Store page length
*/
user_page = 23;
/*
* Compute effective login
*/
user_start = cur_time(); /* Remeber when we started */
user_signon = cur_time();
/*
* Store timelimit
*/
user_signoff = atoi(ascii_user_info[11]) * 60L; /* Compute logoff */
user_signoff += user_signon;
/*
* Test for local node
*/
if(strnicmp(ascii_user_info[3], "COM0", 4) == 0)
remote_user = 0;
/*
* Exit
*/
return(0); /* Exit all ok */
}
/******************************************************************************
*
* PCBBS_READ - Read user infor from PC-BOARD files
*
* process 1. If running local, exit
* 2. Open PCBOARD.SYS file
* 3. Exit if not found
* 4. Read user record
* 5. Exit if bad read
* 6. Store users name
* 7. Store logon time
* 8. Store security level
* 9. Store graphics type
* 10. Store nulls flag
* 11. Store caps flag
* 12. Store page length
* 13. Store used time
* 14. Store timelimit
* 15. Close file
* 16. Exit
* input Node = -1 if no parameters
* Else node = BBS node number
* output Returns 0 if all ok
* Returns -1 if can't find PCBOARD.SYS info
* Returns -2 if can't read PCBOARD.SYS info
*****************************************************************************/
pcbbs_read(node)
int node; /* BBS node number */
{
long lseek();
long cvt_time(); /* Convert time string */
long cur_time(); /* Get current time */
FS rfd; /* File control block */
long foffset; /* File offset */
int i, j, k; /* Work variables */
char string_data[80]; /* Work space */
/*
* Exit if local only
*/
if(remote_user == 0) /* If remote not active... */
return(0); /* ...exit all ok */
/*
* Open PCBOARD.SYS file
*/
strcpy(rfd.name, bbs_dir); /* Build the filename */
strcat(rfd.name, "PCBOARD.SYS");
i = file_open(&rfd, FREAD, FBINARY, FNOCREATE); /* Open the file */
if(i) /* If file not found... */
return(-1); /* ...exit with error */
/*
* Read user node record
*/
lseek(rfd.fh, 0L, 0); /* Seek the location */
if(read(rfd.fh, &pcbbs_user_info, 128) != 128) /* If bad read... */
return(-2); /* ...error */
/*
* Copy parms to RBBS structures
*/
bbs_node_info.snoop[0] = pcbbs_user_info.display[0];
bbs_node_info.snoop[1] = pcbbs_user_info.display[1];
bbs_node_info.line_printer[0] = pcbbs_user_info.printer[0];
bbs_node_info.line_printer[1] = pcbbs_user_info.printer[1];
bbs_node_info.sysop_avail[0] = pcbbs_user_info.page_bell[0];
bbs_node_info.sysop_avail[1] = pcbbs_user_info.page_bell[1];
if(strncmp(pcbbs_user_info.caller_alarm, " 0", 2) == 0)
bbs_user_info.options.bit_flags = 0;
else
bbs_user_info.options.bit_flags = BBS_OPTION_BELL;
bbs_node_info.sysop_next[0] = pcbbs_user_info.sysop_next[0];
bbs_node_info.sysop_next[1] = pcbbs_user_info.sysop_next[1];
if(strncmp(pcbbs_user_info.bps, " 300", 4) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '1';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '1';
}
else if(strncmp(pcbbs_user_info.bps, "0300", 4) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '1';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '1';
}
else if(strncmp(pcbbs_user_info.bps, " 450", 4) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '2';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '2';
}
else if(strncmp(pcbbs_user_info.bps, "0450", 4) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '2';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '2';
}
else if(strncmp(pcbbs_user_info.bps, "1200", 4) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '3';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '3';
}
else if(strncmp(pcbbs_user_info.bps, "2400", 4) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '4';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '4';
}
else if(strncmp(pcbbs_user_info.bps, "4800", 4) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '5';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '5';
}
else if(strncmp(pcbbs_user_info.bps, "9600", 4) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '6';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '6';
}
else
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '3';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '3';
}
i = 0;
while((i < 27) && (pcbbs_user_info.name[i] != 0x0d) &&
(pcbbs_user_info.name[i] != 0x0a) && (pcbbs_user_info.name[i] != 0x00))
{
bbs_node_info.name[i] = pcbbs_user_info.name[i];
bbs_user_info.name[i] = pcbbs_user_info.name[i];
i++;
}
while(i < 31)
{
bbs_node_info.name[i] = ' ';
bbs_user_info.name[i] = ' ';
i++;
}
bbs_node_info.name[i] = '\0';
bbs_user_info.name[i] = '\0';
if(strncmp(pcbbs_user_info.graphics, " 0", 2) == 0)
{
bbs_node_info.graphics_type[0] = ' ';
bbs_node_info.graphics_type[0] = '0';
bbs_user_info.options.graphics[0] = '0';
}
else
{
bbs_node_info.graphics_type[0] = ' ';
bbs_node_info.graphics_type[0] = '2';
bbs_user_info.options.graphics[0] = '2';
}
for(i = 0 ; i < 12 ; i++)
bbs_user_info.password[i] = pcbbs_user_info.password[i];
bbs_user_info.password[i] = '\0';
user_start = cur_time();
user_signon = pcbbs_user_info.connect_time;
user_signoff = pcbbs_user_info.max_time;
user_signoff += user_signon;
bbs_node_info.login_time[0] = pcbbs_user_info.logon[0];
bbs_node_info.login_time[1] = pcbbs_user_info.logon[1];
bbs_node_info.login_time[2] = pcbbs_user_info.logon[3];
bbs_node_info.login_time[3] = pcbbs_user_info.logon[4];
bbs_node_info.login_time[4] = '0';
bbs_node_info.login_time[5] = '0';
/*
* Fill unsuplied parms to RBBS structures
*/
bbs_node_info.sysop_annoy[0] = ' ';
bbs_node_info.sysop_annoy[1] = '0';
bbs_node_info.doors_avail[0] = '-';
bbs_node_info.doors_avail[1] = '1';
bbs_node_info.eight_bits[0] = '-';
bbs_node_info.eight_bits[1] = '1';
bbs_node_info.upper_case[0] = ' ';
bbs_node_info.upper_case[1] = '0';
bbs_node_info.reserve_1[0] = ' ';
bbs_node_info.reserve_1[1] = ' ';
bbs_node_info.reserve_1[2] = ' ';
bbs_node_info.reserve_1[3] = ' ';
bbs_node_info.reserve_1[4] = ' ';
bbs_node_info.sysop[0] = ' ';
bbs_node_info.sysop[1] = '0';
bbs_node_info.active[0] = 'A';
bbs_node_info.reserved_2[0] = ' ';
bbs_node_info.reserved_2[1] = ' ';
bbs_node_info.reserved_3[0] = ' ';
bbs_node_info.reserved_3[1] = ' ';
bbs_node_info.reserved_3[2] = ' ';
bbs_node_info.private_door[0] = ' ';
bbs_node_info.private_door[1] = '0';
bbs_node_info.transfer[0] = ' ';
bbs_node_info.transfer[1] = ' ';
strncpy(bbs_node_info.daily_exit_date, "01-01-1987", 10);
strncpy(bbs_node_info.daily_exit_time, "01:00", 5);
bbs_node_info.reliable[0] = '-';
bbs_node_info.reliable[1] = '1';
for(i = 0 ; i < 36 ; i++)
bbs_node_info.reserved_4[i] = ' ';
bbs_user_info.security = 100;
bbs_user_info.options.logins = 2;
bbs_user_info.options.last_msg = 0;
bbs_user_info.options.protocol[0] = ' ';
bbs_user_info.options.margins = 0;
bbs_user_info.options.subscription = 0;
bbs_user_info.options.page_length = 23;
bbs_user_info.options.reserved[0] = ' ';
for(i = 0 ; i < 24 ; i++)
bbs_user_info.residence[i] = ' ';
for(i = 0 ; i < 19 ; i++)
bbs_user_info.reserved[i] = ' ';
strncpy(bbs_user_info.last_on, "01-01-87 01:00", 14);
for(i = 0 ; i < 3 ; i++)
bbs_user_info.last_dir[i] = '\0';
bbs_user_info.downloads = 0;
bbs_user_info.uploads = 0;
bbs_user_info.elapsed = 0;
/*
* Store users name
*/
for(i = 0 ; i < 31 ; i++) /* Copy all 31 chars */
user_name[i] = bbs_node_info.name[i];
user_name[31] = '\0'; /* Null terminate it */
/*
* Close file
*/
file_close(&rfd); /* Close it */
/*
* Store security level
*/
user_security = bbs_user_info.security;
/*
* Store graphics type
*/
string_data[0] = bbs_user_info.options.graphics[0]; /* Convert to number */
string_data[1] = '\0';
user_graphics = atoi(string_data);
/*
* Store nulls flag
*/
if(bbs_user_info.options.bit_flags & BBS_OPTION_NULLS)
user_nulls = 8;
else
user_nulls = 0;
/*
* Store caps flag
*/
if(bbs_user_info.options.bit_flags & BBS_OPTION_CASE)
user_caps = 1;
else
user_caps = 0;
/*
* Store page length
*/
user_page = bbs_user_info.options.page_length;
/*
* Store timelimit
*/
user_start = cur_time(); /* Remeber when we started */
/*
* Exit
*/
return(0); /* Exit all ok */
}
/******************************************************************************
*
* PCBBS2_READ - Read user infor from PC-BOARD files
*
* process 1. If running local, exit
* 2. Open PCBOARD.SYS file
* 3. Exit if not found
* 4. Read user record
* 5. Exit if bad read
* 6. Store users name
* 7. Store logon time
* 8. Store security level
* 9. Store graphics type
* 10. Store nulls flag
* 11. Store caps flag
* 12. Store page length
* 13. Store used time
* 14. Store timelimit
* 15. Close file
* 16. Exit
* input Node = -1 if no parameters
* Else node = BBS node number
* output Returns 0 if all ok
* Returns -1 if can't find PCBOARD.SYS info
* Returns -2 if can't read PCBOARD.SYS info
*****************************************************************************/
pcbbs2_read(node)
int node; /* BBS node number */
{
long lseek();
long cvt_time(); /* Convert time string */
long cur_time(); /* Get current time */
FS rfd; /* File control block */
long foffset; /* File offset */
int i, j, k; /* Work variables */
char string_data[80]; /* Work space */
/*
* Exit if local only
*/
if(remote_user == 0) /* If remote not active... */
return(0); /* ...exit all ok */
/*
* Open PCBOARD.SYS file
*/
strcpy(rfd.name, bbs_dir); /* Build the filename */
strcat(rfd.name, "PCBOARD.SYS");
i = file_open(&rfd, FREAD, FBINARY, FNOCREATE); /* Open the file */
if(i) /* If file not found... */
return(-1); /* ...exit with error */
/*
* Read user node record
*/
lseek(rfd.fh, 0L, 0); /* Seek the location */
if(read(rfd.fh, &pcbbs2_user_info, 128) != 128) /* If bad read... */
return(-2); /* ...error */
/*
* Copy parms to RBBS structures
*/
bbs_node_info.snoop[0] = pcbbs2_user_info.display[0];
bbs_node_info.snoop[1] = pcbbs2_user_info.display[1];
bbs_node_info.line_printer[0] = pcbbs2_user_info.printer[0];
bbs_node_info.line_printer[1] = pcbbs2_user_info.printer[1];
bbs_node_info.sysop_avail[0] = pcbbs2_user_info.page_bell[0];
bbs_node_info.sysop_avail[1] = pcbbs2_user_info.page_bell[1];
if(strncmp(pcbbs2_user_info.caller_alarm, " 0", 2) == 0)
bbs_user_info.options.bit_flags = 0;
else
bbs_user_info.options.bit_flags = BBS_OPTION_BELL;
if(pcbbs2_user_info.sysop_next == '0')
bbs_node_info.sysop_next[0] = ' ';
else
bbs_node_info.sysop_next[0] = '-';
bbs_node_info.sysop_next[1] = pcbbs2_user_info.sysop_next;
if(strnicmp(pcbbs2_user_info.bps, "LOCAL", 5) == 0)
{
remote_user = 0;
}
else if(strncmp(pcbbs2_user_info.bps, " 300", 5) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '1';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '1';
}
else if(strncmp(pcbbs2_user_info.bps, " 0300", 5) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '1';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '1';
}
else if(strncmp(pcbbs2_user_info.bps, "00300", 5) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '1';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '1';
}
else if(strncmp(pcbbs2_user_info.bps, " 450", 5) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '2';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '2';
}
else if(strncmp(pcbbs2_user_info.bps, " 0450", 5) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '2';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '2';
}
else if(strncmp(pcbbs2_user_info.bps, "00450", 5) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '2';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '2';
}
else if(strncmp(pcbbs2_user_info.bps, " 1200", 5) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '3';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '3';
}
else if(strncmp(pcbbs2_user_info.bps, "01200", 5) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '3';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '3';
}
else if(strncmp(pcbbs2_user_info.bps, " 2400", 5) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '4';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '4';
}
else if(strncmp(pcbbs2_user_info.bps, "02400", 5) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '4';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '4';
}
else if(strncmp(pcbbs2_user_info.bps, " 4800", 5) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '5';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '5';
}
else if(strncmp(pcbbs2_user_info.bps, "04800", 5) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '5';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '5';
}
else if(strncmp(pcbbs2_user_info.bps, " 9600", 5) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '6';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '6';
}
else if(strncmp(pcbbs2_user_info.bps, "09600", 5) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '6';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '6';
}
else if(strncmp(pcbbs2_user_info.bps, "19200", 5) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '7';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '7';
}
else if(strncmp(pcbbs2_user_info.bps, "38400", 5) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '8';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '8';
}
else
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '3';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '3';
}
i = 0;
while((i < 25) && (pcbbs2_user_info.name[i] != 0x0d) &&
(pcbbs2_user_info.name[i] != 0x0a) && (pcbbs2_user_info.name[i] != 0x00))
{
bbs_node_info.name[i] = pcbbs2_user_info.name[i];
bbs_user_info.name[i] = pcbbs2_user_info.name[i];
i++;
}
while(i < 31)
{
bbs_node_info.name[i] = ' ';
bbs_user_info.name[i] = ' ';
i++;
}
bbs_node_info.name[i] = '\0';
bbs_user_info.name[i] = '\0';
if(pcbbs2_user_info.graphics == '0')
{
bbs_node_info.graphics_type[0] = ' ';
bbs_node_info.graphics_type[0] = '0';
bbs_user_info.options.graphics[0] = '0';
}
else
{
bbs_node_info.graphics_type[0] = ' ';
bbs_node_info.graphics_type[0] = '2';
bbs_user_info.options.graphics[0] = '2';
}
for(i = 0 ; i < 12 ; i++)
bbs_user_info.password[i] = pcbbs2_user_info.password[i];
bbs_user_info.password[i] = '\0';
user_start = cur_time();
user_signon = cur_time();
user_signoff = pcbbs2_user_info.time_left;
user_signoff *= 60L;
user_signoff += user_signon;
bbs_node_info.login_time[0] = pcbbs2_user_info.logon[0];
bbs_node_info.login_time[1] = pcbbs2_user_info.logon[1];
bbs_node_info.login_time[2] = pcbbs2_user_info.logon[3];
bbs_node_info.login_time[3] = pcbbs2_user_info.logon[4];
bbs_node_info.login_time[4] = '0';
bbs_node_info.login_time[5] = '0';
/*
* Fill unsuplied parms to RBBS structures
*/
bbs_node_info.sysop_annoy[0] = ' ';
bbs_node_info.sysop_annoy[1] = '0';
bbs_node_info.doors_avail[0] = '-';
bbs_node_info.doors_avail[1] = '1';
bbs_node_info.eight_bits[0] = '-';
bbs_node_info.eight_bits[1] = '1';
bbs_node_info.upper_case[0] = ' ';
bbs_node_info.upper_case[1] = '0';
bbs_node_info.reserve_1[0] = ' ';
bbs_node_info.reserve_1[1] = ' ';
bbs_node_info.reserve_1[2] = ' ';
bbs_node_info.reserve_1[3] = ' ';
bbs_node_info.reserve_1[4] = ' ';
bbs_node_info.sysop[0] = ' ';
bbs_node_info.sysop[1] = '0';
bbs_node_info.active[0] = 'A';
bbs_node_info.reserved_2[0] = ' ';
bbs_node_info.reserved_2[1] = ' ';
bbs_node_info.reserved_3[0] = ' ';
bbs_node_info.reserved_3[1] = ' ';
bbs_node_info.reserved_3[2] = ' ';
bbs_node_info.private_door[0] = ' ';
bbs_node_info.private_door[1] = '0';
bbs_node_info.transfer[0] = ' ';
bbs_node_info.transfer[1] = ' ';
strncpy(bbs_node_info.daily_exit_date, "01-01-1987", 10);
strncpy(bbs_node_info.daily_exit_time, "01:00", 5);
bbs_node_info.reliable[0] = '-';
bbs_node_info.reliable[1] = '1';
for(i = 0 ; i < 36 ; i++)
bbs_node_info.reserved_4[i] = ' ';
bbs_user_info.security = 100;
bbs_user_info.options.logins = 2;
bbs_user_info.options.last_msg = 0;
bbs_user_info.options.protocol[0] = ' ';
bbs_user_info.options.margins = 0;
bbs_user_info.options.subscription = 0;
bbs_user_info.options.page_length = 23;
bbs_user_info.options.reserved[0] = ' ';
for(i = 0 ; i < 24 ; i++)
bbs_user_info.residence[i] = ' ';
for(i = 0 ; i < 19 ; i++)
bbs_user_info.reserved[i] = ' ';
strncpy(bbs_user_info.last_on, "01-01-87 01:00", 14);
for(i = 0 ; i < 3 ; i++)
bbs_user_info.last_dir[i] = '\0';
bbs_user_info.downloads = 0;
bbs_user_info.uploads = 0;
bbs_user_info.elapsed = 0;
/*
* Store users name
*/
for(i = 0 ; i < 31 ; i++) /* Copy all 31 chars */
user_name[i] = bbs_node_info.name[i];
user_name[31] = '\0'; /* Null terminate it */
/*
* Close file
*/
file_close(&rfd); /* Close it */
/*
* Store security level
*/
user_security = bbs_user_info.security;
/*
* Store graphics type
*/
string_data[0] = bbs_user_info.options.graphics[0]; /* Convert to number */
string_data[1] = '\0';
user_graphics = atoi(string_data);
/*
* Store nulls flag
*/
if(bbs_user_info.options.bit_flags & BBS_OPTION_NULLS)
user_nulls = 8;
else
user_nulls = 0;
/*
* Store caps flag
*/
if(bbs_user_info.options.bit_flags & BBS_OPTION_CASE)
user_caps = 1;
else
user_caps = 0;
/*
* Store page length
*/
user_page = bbs_user_info.options.page_length;
/*
* Store timelimit
*/
user_start = cur_time(); /* Remeber when we started */
/*
* Exit
*/
return(0); /* Exit all ok */
}
/******************************************************************************
*
* WCBBS_READ - Read user infor from Wildcat files
*
* process 1. If running local, exit
* 2. Open CALLINFO.BBS file
* 3. Exit if not found
* 4. Read user record
* 5. Exit if bad read
* 6. Store users name
* 7. Store logon time
* 8. Store security level
* 9. Store graphics type
* 10. Store nulls flag
* 11. Store caps flag
* 12. Store page length
* 13. Store used time
* 14. Store timelimit
* 15. Close file
* 16. Exit
* input Node = -1 if no parameters
* Else node = BBS node number
* output Returns 0 if all ok
* Returns -1 if can't find CALLINFO.BBS info
* Returns -2 if can't read CALLINFO.BBS info
*****************************************************************************/
wcbbs_read(node)
int node; /* BBS node number */
{
long cvt_time(); /* Convert time string */
long cur_time(); /* Get current time */
long atol();
FS rfd; /* File control block */
long foffset; /* File offset */
int i, j, k; /* Work variables */
char string_data[80]; /* Work space */
/*
* Exit if local only
*/
if(remote_user == 0) /* If remote not active... */
return(0); /* ...exit all ok */
/*
* Open CALLINFO.BBS file
*/
strcpy(rfd.name, bbs_dir); /* Build the filename */
strcat(rfd.name, "CALLINFO.BBS");
i = file_open(&rfd, FREAD, FBINARY, FNOCREATE); /* Open the file */
if(i) /* If file not found... */
return(-1); /* ...exit with error */
/*
* Read user node record
*/
fseek(rfd.fd, 0L, 0); /* Seek the location */
for(i = 0 ; i < 28 ; i++)
{
if(fgets(ascii_user_info[i], 128, rfd.fd) == NULL) /* If bad read... */
{
file_close(&rfd);
return(-2); /* ...error */
}
}
/*
* Copy parms to RBBS structures
*/
bbs_node_info.snoop[0] = '-';
bbs_node_info.snoop[1] = '1';
bbs_node_info.line_printer[0] = ' ';
bbs_node_info.line_printer[1] = '0';
bbs_node_info.sysop_avail[0] = '-';
bbs_node_info.sysop_avail[1] = '1';
bbs_user_info.options.bit_flags = BBS_OPTION_BELL;
bbs_node_info.sysop_next[0] = ' ';
bbs_node_info.sysop_next[1] = '0';
if(strncmp(ascii_user_info[1], "1", 1) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '1';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '1';
}
else if(strncmp(ascii_user_info[1], "2", 1) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '3';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '3';
}
else if(strncmp(ascii_user_info[1], "0", 1) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '4';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '4';
}
else if(strncmp(ascii_user_info[1], "3", 1) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '6';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '6';
}
else
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '3';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '3';
}
i = 0;
while((i < 31) && (ascii_user_info[0][i] != 0x0d) &&
(ascii_user_info[0][i] != 0x0a) && (ascii_user_info[0][i] != 0x00))
{
bbs_node_info.name[i] = ascii_user_info[0][i];
user_name[i] = ascii_user_info[0][i];
i++;
}
while(i < 31)
{
bbs_node_info.name[i] = ' ';
user_name[i] = ' ';
i++;
}
user_name[i] = '\0';
if(strncmp(strupr(ascii_user_info[5]), "MONO", 4) == 0)
{
bbs_node_info.graphics_type[0] = ' ';
bbs_node_info.graphics_type[0] = '0';
bbs_user_info.options.graphics[0] = '0';
user_graphics = 0;
}
else if(strncmp(strupr(ascii_user_info[5]), "COLOR", 5) == 0)
{
bbs_node_info.graphics_type[0] = ' ';
bbs_node_info.graphics_type[0] = '2';
bbs_user_info.options.graphics[0] = '2';
user_graphics = 2;
}
else
{
bbs_node_info.graphics_type[0] = ' ';
bbs_node_info.graphics_type[0] = '2';
bbs_user_info.options.graphics[0] = '2';
user_graphics = 2;
}
for(i = 0 ; i < 12 ; i++)
bbs_user_info.password[i] = ascii_user_info[6][i];
bbs_user_info.password[i] = '\0';
user_start = cur_time();
user_signon = cur_time();
user_signoff = atol(ascii_user_info[4]) * 60L;
user_signoff += user_signon;
bbs_node_info.login_time[0] = ascii_user_info[10][0];
bbs_node_info.login_time[1] = ascii_user_info[10][1];
bbs_node_info.login_time[2] = ascii_user_info[10][3];
bbs_node_info.login_time[3] = ascii_user_info[10][4];
bbs_node_info.login_time[4] = '0';
bbs_node_info.login_time[5] = '0';
/*
* Test for local access
*/
i = 0;
while(ascii_user_info[27][i] == ' ')
i++;
if(strnicmp(&(ascii_user_info[27][i]), "LOCAL", 5) == 0)
remote_user = 0;
/*
* Fill unsuplied parms to RBBS structures
*/
bbs_node_info.sysop_annoy[0] = ' ';
bbs_node_info.sysop_annoy[1] = '0';
bbs_node_info.doors_avail[0] = '-';
bbs_node_info.doors_avail[1] = '1';
bbs_node_info.eight_bits[0] = '-';
bbs_node_info.eight_bits[1] = '1';
bbs_node_info.upper_case[0] = ' ';
bbs_node_info.upper_case[1] = '0';
bbs_node_info.reserve_1[0] = ' ';
bbs_node_info.reserve_1[1] = ' ';
bbs_node_info.reserve_1[2] = ' ';
bbs_node_info.reserve_1[3] = ' ';
bbs_node_info.reserve_1[4] = ' ';
bbs_node_info.sysop[0] = ' ';
bbs_node_info.sysop[1] = '0';
bbs_node_info.active[0] = 'A';
bbs_node_info.reserved_2[0] = ' ';
bbs_node_info.reserved_2[1] = ' ';
bbs_node_info.reserved_3[0] = ' ';
bbs_node_info.reserved_3[1] = ' ';
bbs_node_info.reserved_3[2] = ' ';
bbs_node_info.private_door[0] = ' ';
bbs_node_info.private_door[1] = '0';
bbs_node_info.transfer[0] = ' ';
bbs_node_info.transfer[1] = ' ';
strncpy(bbs_node_info.daily_exit_date, "01-01-1987", 10);
strncpy(bbs_node_info.daily_exit_time, "01:00", 5);
bbs_node_info.reliable[0] = '-';
bbs_node_info.reliable[1] = '1';
for(i = 0 ; i < 36 ; i++)
bbs_node_info.reserved_4[i] = ' ';
bbs_user_info.security = atoi(ascii_user_info[3]);
bbs_user_info.options.logins = atoi(ascii_user_info[21]);
bbs_user_info.options.last_msg = atoi(ascii_user_info[23]);
bbs_user_info.options.protocol[0] = ' ';
bbs_user_info.options.margins = 0;
bbs_user_info.options.subscription = 0;
bbs_user_info.options.page_length = atoi(ascii_user_info[22]);
bbs_user_info.options.reserved[0] = ' ';
for(i = 0 ; i < 24 ; i++)
bbs_user_info.residence[i] = ' ';
for(i = 0 ; i < 19 ; i++)
bbs_user_info.reserved[i] = ' ';
strncpy(bbs_user_info.last_on, "01-01-87 01:00", 14);
for(i = 0 ; i < 3 ; i++)
bbs_user_info.last_dir[i] = '\0';
bbs_user_info.downloads = 0;
bbs_user_info.uploads = 0;
bbs_user_info.elapsed = 0;
/*
* Close file
*/
file_close(&rfd); /* Close it */
/*
* Store security level
*/
user_security = bbs_user_info.security;
/*
* Store nulls flag
*/
if(bbs_user_info.options.bit_flags & BBS_OPTION_NULLS)
user_nulls = 8;
else
user_nulls = 0;
/*
* Store caps flag
*/
if(bbs_user_info.options.bit_flags & BBS_OPTION_CASE)
user_caps = 1;
else
user_caps = 0;
/*
* Store page length
*/
user_page = bbs_user_info.options.page_length;
/*
* Store timelimit
*/
user_start = cur_time(); /* Remeber when we started */
/*
* Test for local login
*/
if(strnicmp(ascii_user_info[27], "LOCAL", 5) == 0)
remote_user = 0;
/*
* Exit
*/
return(0); /* Exit all ok */
}
/******************************************************************************
*
* GBBS_READ - Read user infor from DOOR.SYS file
*
* process 1. If running local, exit
* 2. Open DOOR.SYS file
* 3. Exit if not found
* 4. Read user record
* 5. Exit if bad read
* 6. Store users name
* 7. Store logon time
* 8. Store security level
* 9. Store graphics type
* 10. Store nulls flag
* 11. Store caps flag
* 12. Store page length
* 13. Store used time
* 14. Store timelimit
* 15. Close file
* 16. Exit
* input Node = -1 if no parameters
* Else node = BBS node number
* output Returns 0 if all ok
* Returns -1 if can't find DOOR.SYS info
* Returns -2 if can't read DOOR.SYS info
*****************************************************************************/
gbbs_read(node)
int node; /* BBS node number */
{
long cvt_time(); /* Convert time string */
long cur_time(); /* Get current time */
long atol(); /* Convert ASCII to long */
FS rfd; /* File control block */
long foffset; /* File offset */
int i, j, k; /* Work variables */
char string_data[80]; /* Work space */
/*
* Exit if local only
*/
if(remote_user == 0) /* If remote not active... */
return(0); /* ...exit all ok */
/*
* Open DOOR.SYS file
*/
strcpy(rfd.name, bbs_dir); /* Build the filename */
strcat(rfd.name, "DOOR.SYS");
i = file_open(&rfd, FREAD, FBINARY, FNOCREATE); /* Open the file */
if(i) /* If file not found... */
return(-1); /* ...exit with error */
/*
* Read user node record
*/
fseek(rfd.fd, 0L, 0); /* Seek the location */
i = 0; /* Line counter */
while((fgets(ascii_user_info[i], 128, rfd.fd) != NULL) && (i < 31))
i++;
/*
* Close file
*/
file_close(&rfd); /* Close it */
if(i != 31)
return(-2); /* ...error */
/*
* Copy parms to RBBS structures
*/
i = 0;
while(ascii_user_info[5][i] == ' ')
i++;
if((ascii_user_info[5][i] == 'Y') || (ascii_user_info[5][i] == 'y'))
{
bbs_node_info.snoop[0] = '-';
bbs_node_info.snoop[1] = '1';
}
else
{
bbs_node_info.snoop[0] = ' ';
bbs_node_info.snoop[1] = '0';
}
i = 0;
while(ascii_user_info[6][i] == ' ')
i++;
if((ascii_user_info[6][i] == 'Y') || (ascii_user_info[6][i] == 'y'))
{
bbs_node_info.line_printer[0] = '-';
bbs_node_info.line_printer[1] = '1';
}
else
{
bbs_node_info.line_printer[0] = ' ';
bbs_node_info.line_printer[1] = '0';
}
i = 0;
while(ascii_user_info[7][i] == ' ')
i++;
if((ascii_user_info[7][i] == 'Y') || (ascii_user_info[7][i] == 'y'))
{
bbs_node_info.sysop_avail[0] = '-';
bbs_node_info.sysop_avail[1] = '1';
}
else
{
bbs_node_info.sysop_avail[0] = ' ';
bbs_node_info.sysop_avail[1] = '0';
}
while(ascii_user_info[8][i] == ' ')
i++;
if((ascii_user_info[8][i] == 'Y') || (ascii_user_info[8][i] == 'y'))
bbs_user_info.options.bit_flags = BBS_OPTION_BELL;
else
bbs_user_info.options.bit_flags = 0;
bbs_node_info.sysop_next[0] = ' ';
bbs_node_info.sysop_next[1] = '0';
i = 0;
while(ascii_user_info[1][i] == ' ')
i++;
if(strncmp(&ascii_user_info[1][i], "300", 3) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '1';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '1';
}
else if(strncmp(&ascii_user_info[1][i], "450", 3) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '2';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '2';
}
else if(strncmp(&ascii_user_info[1][i], "1200", 4) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '3';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '3';
}
else if(strncmp(&ascii_user_info[1][i], "2400", 4) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '4';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '4';
}
else if(strncmp(&ascii_user_info[1][i], "4800", 4) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '5';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '5';
}
else if(strncmp(&ascii_user_info[1][i], "9600", 4) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '6';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '6';
}
else
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '7';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '7';
}
i = 0;
j = 0;
while(ascii_user_info[9][i] == ' ')
i++;
while((j < 31) && (ascii_user_info[9][i] != 0x0d) &&
(ascii_user_info[9][i] != 0x0a) && (ascii_user_info[9][i] != 0x00))
{
bbs_node_info.name[j] = ascii_user_info[9][i];
bbs_user_info.name[j] = ascii_user_info[9][i];
user_name[j] = ascii_user_info[9][i];
i++;
j++;
}
while(j < 31)
{
bbs_node_info.name[j] = ' ';
bbs_user_info.name[j] = ' ';
user_name[j] = ' ';
j++;
}
user_name[j] = '\0';
bbs_node_info.name[j] = '\0';
bbs_user_info.name[j] = '\0';
i = 0;
while(ascii_user_info[19][i] == ' ')
i++;
if(strncmp(&ascii_user_info[19][i], "GR", 2) == 0)
{
bbs_node_info.graphics_type[0] = ' ';
bbs_node_info.graphics_type[0] = '2';
bbs_user_info.options.graphics[0] = '2';
}
else
{
bbs_node_info.graphics_type[0] = ' ';
bbs_node_info.graphics_type[0] = '0';
bbs_user_info.options.graphics[0] = '0';
}
i = 0;
j = 0;
while(ascii_user_info[13][i] == ' ')
i++;
while((j < 12) && (ascii_user_info[13][i] != 0x0d) &&
(ascii_user_info[13][i] != 0x0a) && (ascii_user_info[13][i] != 0x00))
{
bbs_user_info.password[j] = ascii_user_info[13][i];
i++;
j++;
}
while(j < 12)
{
bbs_user_info.password[j] = ' ';
j++;
}
bbs_user_info.password[j] = '\0';
i = 0;
while(ascii_user_info[17][i] == ' ')
i++;
user_start = cur_time();
user_signon = cur_time();
user_signoff = atol(&ascii_user_info[17][i]);
user_signoff += user_signon;
i = 0;
while(ascii_user_info[14][i] == ' ')
i++;
bbs_user_info.security = atoi(&ascii_user_info[14][i]);
i = 0;
while(ascii_user_info[20][i] == ' ')
i++;
bbs_user_info.options.page_length = atoi(&ascii_user_info[20][i]);
/*
* Test for local access
*/
i = 0;
while(ascii_user_info[0][i] == ' ')
i++;
if(strcmpi(&(ascii_user_info[27][i]), "COM0") == 0)
remote_user = 0;
/*
* Fill unsuplied parms to RBBS structures
*/
bbs_node_info.login_time[0] = '0';
bbs_node_info.login_time[1] = '0';
bbs_node_info.login_time[2] = '0';
bbs_node_info.login_time[3] = '0';
bbs_node_info.login_time[4] = '0';
bbs_node_info.login_time[5] = '0';
bbs_node_info.sysop_annoy[0] = ' ';
bbs_node_info.sysop_annoy[1] = '0';
bbs_node_info.doors_avail[0] = '-';
bbs_node_info.doors_avail[1] = '1';
bbs_node_info.eight_bits[0] = '-';
bbs_node_info.eight_bits[1] = '1';
bbs_node_info.upper_case[0] = ' ';
bbs_node_info.upper_case[1] = '0';
bbs_node_info.reserve_1[0] = ' ';
bbs_node_info.reserve_1[1] = ' ';
bbs_node_info.reserve_1[2] = ' ';
bbs_node_info.reserve_1[3] = ' ';
bbs_node_info.reserve_1[4] = ' ';
bbs_node_info.sysop[0] = ' ';
bbs_node_info.sysop[1] = '0';
bbs_node_info.active[0] = 'A';
bbs_node_info.reserved_2[0] = ' ';
bbs_node_info.reserved_2[1] = ' ';
bbs_node_info.reserved_3[0] = ' ';
bbs_node_info.reserved_3[1] = ' ';
bbs_node_info.reserved_3[2] = ' ';
bbs_node_info.private_door[0] = ' ';
bbs_node_info.private_door[1] = '0';
bbs_node_info.transfer[0] = ' ';
bbs_node_info.transfer[1] = ' ';
strncpy(bbs_node_info.daily_exit_date, "01-01-1987", 10);
strncpy(bbs_node_info.daily_exit_time, "01:00", 5);
bbs_node_info.reliable[0] = '-';
bbs_node_info.reliable[1] = '1';
for(i = 0 ; i < 36 ; i++)
bbs_node_info.reserved_4[i] = ' ';
bbs_user_info.options.logins = 2;
bbs_user_info.options.last_msg = 0;
bbs_user_info.options.protocol[0] = ' ';
bbs_user_info.options.margins = 0;
bbs_user_info.options.subscription = 0;
bbs_user_info.options.reserved[0] = ' ';
for(i = 0 ; i < 24 ; i++)
bbs_user_info.residence[i] = ' ';
for(i = 0 ; i < 19 ; i++)
bbs_user_info.reserved[i] = ' ';
strncpy(bbs_user_info.last_on, "01-01-87 01:00", 14);
for(i = 0 ; i < 3 ; i++)
bbs_user_info.last_dir[i] = '\0';
bbs_user_info.downloads = 0;
bbs_user_info.uploads = 0;
bbs_user_info.elapsed = 0;
/*
* Store users name
*/
for(i = 0 ; i < 31 ; i++) /* Copy all 31 chars */
user_name[i] = bbs_node_info.name[i];
user_name[31] = '\0'; /* Null terminate it */
/*
* Store security level
*/
user_security = bbs_user_info.security;
/*
* Store graphics type
*/
string_data[0] = bbs_user_info.options.graphics[0]; /* Convert to number */
string_data[1] = '\0';
user_graphics = atoi(string_data);
/*
* Store nulls flag
*/
if(bbs_user_info.options.bit_flags & BBS_OPTION_NULLS)
user_nulls = 8;
else
user_nulls = 0;
/*
* Store caps flag
*/
if(bbs_user_info.options.bit_flags & BBS_OPTION_CASE)
user_caps = 1;
else
user_caps = 0;
/*
* Store page length
*/
user_page = bbs_user_info.options.page_length;
/*
* Store timelimit
*/
user_start = cur_time(); /* Remeber when we started */
/*
* Exit
*/
return(0); /* Exit all ok */
}
/******************************************************************************
*
* WBBS_READ - Read user infor from CHAIN.TXT file
*
* process 1. If running local, exit
* 2. Open CHAIN.TXT file
* 3. Exit if not found
* 4. Read user record
* 5. Exit if bad read
* 6. Store users name
* 7. Store logon time
* 8. Store security level
* 9. Store graphics type
* 10. Store nulls flag
* 11. Store caps flag
* 12. Store page length
* 13. Store used time
* 14. Store timelimit
* 15. Close file
* 16. Exit
* input Node = -1 if no parameters
* Else node = BBS node number
* output Returns 0 if all ok
* Returns -1 if can't find CHAIN.TXT info
* Returns -2 if can't read CHAIN.TXT info
*****************************************************************************/
wbbs_read(node)
int node; /* BBS node number */
{
long cvt_time(); /* Convert time string */
long cur_time(); /* Get current time */
long atol(); /* Convert ASCII to long */
FS rfd; /* File control block */
long foffset; /* File offset */
int i, j, k; /* Work variables */
char string_data[80]; /* Work space */
/*
* Exit if local only
*/
if(remote_user == 0) /* If remote not active... */
return(0); /* ...exit all ok */
/*
* Open CHAIN.TXT file
*/
strcpy(rfd.name, bbs_dir); /* Build the filename */
strcat(rfd.name, "CHAIN.TXT");
i = file_open(&rfd, FREAD, FBINARY, FNOCREATE); /* Open the file */
if(i) /* If file not found... */
return(-1); /* ...exit with error */
/*
* Read user node record
*/
fseek(rfd.fd, 0L, 0); /* Seek the location */
i = 0; /* Line counter */
while((fgets(ascii_user_info[i], 128, rfd.fd) != NULL) && (i < 21))
i++;
/*
* Close file
*/
file_close(&rfd); /* Close it */
if(i != 21)
return(-2); /* ...error */
/*
* Copy parms to RBBS structures
*/
i = 0;
while(ascii_user_info[19][i] == ' ')
i++;
if(strncmp(&ascii_user_info[19][i], "300", 3) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '1';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '1';
}
else if(strncmp(&ascii_user_info[19][i], "450", 3) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '2';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '2';
}
else if(strncmp(&ascii_user_info[19][i], "1200", 4) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '3';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '3';
}
else if(strncmp(&ascii_user_info[19][i], "2400", 4) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '4';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '4';
}
else if(strncmp(&ascii_user_info[19][i], "4800", 4) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '5';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '5';
}
else if(strncmp(&ascii_user_info[19][i], "9600", 4) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '6';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '6';
}
else if(strncmp(&ascii_user_info[19][i], "19200", 5) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '7';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '7';
}
else if(strncmp(&ascii_user_info[19][i], "38400", 5) == 0)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '8';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '8';
}
else
{
remote_user = 0;
}
i = 0;
j = 0;
while(ascii_user_info[3][i] == ' ')
i++;
while((j < 31) && (ascii_user_info[2][i] != 0x0d) &&
(ascii_user_info[2][i] != 0x0a) && (ascii_user_info[2][i] != 0x00))
{
bbs_node_info.name[j] = ascii_user_info[2][i];
bbs_user_info.name[j] = ascii_user_info[2][i];
user_name[j] = ascii_user_info[2][i];
i++;
j++;
}
while(j < 31)
{
bbs_node_info.name[j] = ' ';
bbs_user_info.name[j] = ' ';
user_name[j] = ' ';
j++;
}
user_name[j] = '\0';
bbs_node_info.name[j] = '\0';
bbs_user_info.name[j] = '\0';
i = 0;
while(ascii_user_info[13][i] == ' ')
i++;
if(ascii_user_info[13][i] == '1')
{
bbs_node_info.graphics_type[0] = ' ';
bbs_node_info.graphics_type[0] = '2';
bbs_user_info.options.graphics[0] = '2';
}
else
{
bbs_node_info.graphics_type[0] = ' ';
bbs_node_info.graphics_type[0] = '0';
bbs_user_info.options.graphics[0] = '0';
}
i = 0;
while(ascii_user_info[15][i] == ' ')
i++;
user_start = cur_time();
user_signon = cur_time();
user_signoff = atol(&ascii_user_info[15][i]);
user_signoff += user_signon;
i = 0;
while(ascii_user_info[10][i] == ' ')
i++;
bbs_user_info.security = atoi(&ascii_user_info[10][i]);
i = 0;
while(ascii_user_info[9][i] == ' ')
i++;
bbs_user_info.options.page_length = atoi(&ascii_user_info[9][i]);
/*
* Fill unsuplied parms to RBBS structures
*/
bbs_node_info.snoop[0] = '-';
bbs_node_info.snoop[1] = '1';
bbs_node_info.line_printer[0] = ' ';
bbs_node_info.line_printer[1] = '0';
bbs_node_info.sysop_avail[0] = '-';
bbs_node_info.sysop_avail[1] = '1';
bbs_user_info.options.bit_flags = BBS_OPTION_BELL;
bbs_node_info.sysop_next[0] = ' ';
bbs_node_info.sysop_next[1] = '0';
strcpy(bbs_user_info.password, "Password");
bbs_node_info.login_time[0] = '0';
bbs_node_info.login_time[1] = '0';
bbs_node_info.login_time[2] = '0';
bbs_node_info.login_time[3] = '0';
bbs_node_info.login_time[4] = '0';
bbs_node_info.login_time[5] = '0';
bbs_node_info.sysop_annoy[0] = ' ';
bbs_node_info.sysop_annoy[1] = '0';
bbs_node_info.doors_avail[0] = '-';
bbs_node_info.doors_avail[1] = '1';
bbs_node_info.eight_bits[0] = '-';
bbs_node_info.eight_bits[1] = '1';
bbs_node_info.upper_case[0] = ' ';
bbs_node_info.upper_case[1] = '0';
bbs_node_info.reserve_1[0] = ' ';
bbs_node_info.reserve_1[1] = ' ';
bbs_node_info.reserve_1[2] = ' ';
bbs_node_info.reserve_1[3] = ' ';
bbs_node_info.reserve_1[4] = ' ';
bbs_node_info.sysop[0] = ' ';
bbs_node_info.sysop[1] = '0';
bbs_node_info.active[0] = 'A';
bbs_node_info.reserved_2[0] = ' ';
bbs_node_info.reserved_2[1] = ' ';
bbs_node_info.reserved_3[0] = ' ';
bbs_node_info.reserved_3[1] = ' ';
bbs_node_info.reserved_3[2] = ' ';
bbs_node_info.private_door[0] = ' ';
bbs_node_info.private_door[1] = '0';
bbs_node_info.transfer[0] = ' ';
bbs_node_info.transfer[1] = ' ';
strncpy(bbs_node_info.daily_exit_date, "01-01-1987", 10);
strncpy(bbs_node_info.daily_exit_time, "01:00", 5);
bbs_node_info.reliable[0] = '-';
bbs_node_info.reliable[1] = '1';
for(i = 0 ; i < 36 ; i++)
bbs_node_info.reserved_4[i] = ' ';
bbs_user_info.options.logins = 2;
bbs_user_info.options.last_msg = 0;
bbs_user_info.options.protocol[0] = ' ';
bbs_user_info.options.margins = 0;
bbs_user_info.options.subscription = 0;
bbs_user_info.options.reserved[0] = ' ';
for(i = 0 ; i < 24 ; i++)
bbs_user_info.residence[i] = ' ';
for(i = 0 ; i < 19 ; i++)
bbs_user_info.reserved[i] = ' ';
strncpy(bbs_user_info.last_on, "01-01-87 01:00", 14);
for(i = 0 ; i < 3 ; i++)
bbs_user_info.last_dir[i] = '\0';
bbs_user_info.downloads = 0;
bbs_user_info.uploads = 0;
bbs_user_info.elapsed = 0;
/*
* Store users name
*/
for(i = 0 ; i < 31 ; i++) /* Copy all 31 chars */
user_name[i] = bbs_node_info.name[i];
user_name[31] = '\0'; /* Null terminate it */
/*
* Store security level
*/
user_security = bbs_user_info.security;
/*
* Store graphics type
*/
string_data[0] = bbs_user_info.options.graphics[0]; /* Convert to number */
string_data[1] = '\0';
user_graphics = atoi(string_data);
/*
* Store nulls flag
*/
if(bbs_user_info.options.bit_flags & BBS_OPTION_NULLS)
user_nulls = 8;
else
user_nulls = 0;
/*
* Store caps flag
*/
if(bbs_user_info.options.bit_flags & BBS_OPTION_CASE)
user_caps = 1;
else
user_caps = 0;
/*
* Store page length
*/
user_page = bbs_user_info.options.page_length;
/*
* Store timelimit
*/
user_start = cur_time(); /* Remeber when we started */
/*
* Exit
*/
return(0); /* Exit all ok */
}
/******************************************************************************
*
* SFBBS_READ - Read user infor from Spitfire file
*
* process 1. If running local, exit
* 2. Open Spitfire file
* 3. Exit if not found
* 4. Read user record
* 5. Exit if bad read
* 6. Store users name
* 7. Store logon time
* 8. Store security level
* 9. Store graphics type
* 10. Store nulls flag
* 11. Store caps flag
* 12. Store page length
* 13. Store used time
* 14. Store timelimit
* 15. Close file
* 16. Exit
* input Node = -1 if no parameters
* Else node = BBS node number
* output Returns 0 if all ok
* Returns -1 if can't find Spitfire info
* Returns -2 if can't read Spitfire info
*****************************************************************************/
sfbbs_read(node, sfname)
int node; /* BBS node number */
char *sfname; /* Spitfire data file */
{
long cvt_time(); /* Convert time string */
long cur_time(); /* Get current time */
long atol(); /* Convert ASCII to long */
FS rfd; /* File control block */
long foffset; /* File offset */
int i, j, k; /* Work variables */
char string_data[80]; /* Work space */
/*
* Exit if local only
*/
if(remote_user == 0) /* If remote not active... */
return(0); /* ...exit all ok */
/*
* Open Spitfire file
*/
strcpy(rfd.name, bbs_dir); /* Build the filename */
strcat(rfd.name, sfname);
i = file_open(&rfd, FREAD, FBINARY, FNOCREATE); /* Open the file */
if(i) /* If file not found... */
return(-1); /* ...exit with error */
/*
* Read user node record
*/
fseek(rfd.fd, 0L, 0); /* Seek the location */
i = 0; /* Line counter */
while((fgets(ascii_user_info[i], 128, rfd.fd) != NULL) && (i < 20))
i++;
/*
* Close file
*/
file_close(&rfd); /* Close it */
if(i != 20)
return(-2); /* ...error */
/*
* Copy parms to RBBS structures
*/
i = 0;
while(ascii_user_info[19][i] == ' ')
i++;
if(atoi(&(ascii_user_info[4][i])) == 0)
{
remote_user = 0;
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '4';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '4';
}
else if(atoi(&(ascii_user_info[4][i])) == 300)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '1';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '1';
}
else if(atoi(&(ascii_user_info[4][i])) == 450)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '2';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '2';
}
else if(atoi(&(ascii_user_info[4][i])) == 1200)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '3';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '3';
}
else if(atoi(&(ascii_user_info[4][i])) == 2400)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '4';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '4';
}
else if(atoi(&(ascii_user_info[4][i])) == 4800)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '5';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '5';
}
else if(atoi(&(ascii_user_info[4][i])) == 9600)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '6';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '6';
}
else if(atoi(&(ascii_user_info[4][i])) == 19200)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '7';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '7';
}
else if(atoi(&(ascii_user_info[4][i])) == 38400)
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '8';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '8';
}
else
{
bbs_node_info.baud_rate[0] = '-';
bbs_node_info.baud_rate[1] = '4';
bbs_node_info.baud_dial[0] = '-';
bbs_node_info.baud_dial[1] = '4';
}
i = 0;
j = 0;
while(ascii_user_info[1][i] == ' ')
i++;
while((j < 31) && (ascii_user_info[1][i] != 0x0d) &&
(ascii_user_info[1][i] != 0x0a) && (ascii_user_info[1][i] != 0x00))
{
bbs_node_info.name[j] = ascii_user_info[1][i];
bbs_user_info.name[j] = ascii_user_info[1][i];
user_name[j] = ascii_user_info[1][i];
i++;
j++;
}
while(j < 31)
{
bbs_node_info.name[j] = ' ';
bbs_user_info.name[j] = ' ';
user_name[j] = ' ';
j++;
}
user_name[j] = '\0';
bbs_node_info.name[j] = '\0';
bbs_user_info.name[j] = '\0';
i = 0;
while(ascii_user_info[9][i] == ' ')
i++;
if(strcmpi(&(ascii_user_info[9][i]), "TRUE") == 0)
{
bbs_node_info.graphics_type[0] = ' ';
bbs_node_info.graphics_type[0] = '2';
bbs_user_info.options.graphics[0] = '2';
}
else
{
bbs_node_info.graphics_type[0] = ' ';
bbs_node_info.graphics_type[0] = '0';
bbs_user_info.options.graphics[0] = '0';
}
i = 0;
while(ascii_user_info[6][i] == ' ')
i++;
user_start = cur_time();
user_signon = cur_time();
user_signoff = atol(&ascii_user_info[6][i]);
user_signoff *= 60L;
user_signoff += user_signon;
i = 0;
while(ascii_user_info[10][i] == ' ')
i++;
bbs_user_info.security = atoi(&ascii_user_info[10][i]);
/*
* Fill unsuplied parms to RBBS structures
*/
bbs_node_info.snoop[0] = '-';
bbs_node_info.snoop[1] = '1';
bbs_node_info.line_printer[0] = ' ';
bbs_node_info.line_printer[1] = '0';
bbs_node_info.sysop_avail[0] = '-';
bbs_node_info.sysop_avail[1] = '1';
bbs_user_info.options.bit_flags = BBS_OPTION_BELL;
bbs_user_info.options.page_length = 23;
bbs_node_info.sysop_next[0] = ' ';
bbs_node_info.sysop_next[1] = '0';
strcpy(bbs_user_info.password, "Password");
bbs_node_info.login_time[0] = '0';
bbs_node_info.login_time[1] = '0';
bbs_node_info.login_time[2] = '0';
bbs_node_info.login_time[3] = '0';
bbs_node_info.login_time[4] = '0';
bbs_node_info.login_time[5] = '0';
bbs_node_info.sysop_annoy[0] = ' ';
bbs_node_info.sysop_annoy[1] = '0';
bbs_node_info.doors_avail[0] = '-';
bbs_node_info.doors_avail[1] = '1';
bbs_node_info.eight_bits[0] = '-';
bbs_node_info.eight_bits[1] = '1';
bbs_node_info.upper_case[0] = ' ';
bbs_node_info.upper_case[1] = '0';
bbs_node_info.reserve_1[0] = ' ';
bbs_node_info.reserve_1[1] = ' ';
bbs_node_info.reserve_1[2] = ' ';
bbs_node_info.reserve_1[3] = ' ';
bbs_node_info.reserve_1[4] = ' ';
bbs_node_info.sysop[0] = ' ';
bbs_node_info.sysop[1] = '0';
bbs_node_info.active[0] = 'A';
bbs_node_info.reserved_2[0] = ' ';
bbs_node_info.reserved_2[1] = ' ';
bbs_node_info.reserved_3[0] = ' ';
bbs_node_info.reserved_3[1] = ' ';
bbs_node_info.reserved_3[2] = ' ';
bbs_node_info.private_door[0] = ' ';
bbs_node_info.private_door[1] = '0';
bbs_node_info.transfer[0] = ' ';
bbs_node_info.transfer[1] = ' ';
strncpy(bbs_node_info.daily_exit_date, "01-01-1987", 10);
strncpy(bbs_node_info.daily_exit_time, "01:00", 5);
bbs_node_info.reliable[0] = '-';
bbs_node_info.reliable[1] = '1';
for(i = 0 ; i < 36 ; i++)
bbs_node_info.reserved_4[i] = ' ';
bbs_user_info.options.logins = 2;
bbs_user_info.options.last_msg = 0;
bbs_user_info.options.protocol[0] = ' ';
bbs_user_info.options.margins = 0;
bbs_user_info.options.subscription = 0;
bbs_user_info.options.reserved[0] = ' ';
for(i = 0 ; i < 24 ; i++)
bbs_user_info.residence[i] = ' ';
for(i = 0 ; i < 19 ; i++)
bbs_user_info.reserved[i] = ' ';
strncpy(bbs_user_info.last_on, "01-01-87 01:00", 14);
for(i = 0 ; i < 3 ; i++)
bbs_user_info.last_dir[i] = '\0';
bbs_user_info.downloads = 0;
bbs_user_info.uploads = 0;
bbs_user_info.elapsed = 0;
/*
* Store users name
*/
for(i = 0 ; i < 31 ; i++) /* Copy all 31 chars */
user_name[i] = bbs_node_info.name[i];
user_name[31] = '\0'; /* Null terminate it */
/*
* Store security level
*/
user_security = bbs_user_info.security;
/*
* Store graphics type
*/
string_data[0] = bbs_user_info.options.graphics[0]; /* Convert to number */
string_data[1] = '\0';
user_graphics = atoi(string_data);
/*
* Store nulls flag
*/
if(bbs_user_info.options.bit_flags & BBS_OPTION_NULLS)
user_nulls = 8;
else
user_nulls = 0;
/*
* Store caps flag
*/
if(bbs_user_info.options.bit_flags & BBS_OPTION_CASE)
user_caps = 1;
else
user_caps = 0;
/*
* Store page length
*/
user_page = bbs_user_info.options.page_length;
/*
* Store timelimit
*/
user_start = cur_time(); /* Remeber when we started */
/*
* Exit
*/
return(0); /* Exit all ok */
}
/******************************************************************************
*
* PAGE_OPERATOR - Page local operator
*
* process 1. If running local, exit
* 2. Ring local bell
* 3. Test for local input
* 4. If local input, exit true
* 5. Goto 2
* input None
* output Returns 1 if page answered
* Returns 0 if page not answered
*****************************************************************************/
page_operator()
{
long cur_time();
long time_now;
int normal_hours = 0;
int i, j;
int key;
if(remote_user)
{
time_now = cur_time(); /* Get current time */
if((time_now >= bbs_time_info.sysop_start) &&
(time_now <= bbs_time_info.sysop_stop))
{
normal_hours = 1;
}
if(((normal_hours == 1) && (bbs_node_info.sysop_avail[1] == '1')) ||
(bbs_node_info.sysop_annoy[1] == '1'))
{
for(i = 0 ; i < 10 ; i++) /* Try 10 times */
{
local_bell(); /* Ring the bell */
print_char('.'); /* Print a dot */
for(j = 0 ; j < 5000 ; j++) /* Try a bunch of times */
{
if(local_status()) /* Test for response */
{
if(local_input() == 0x1b)
{
print_string("\r\nSysOp in, go ahead...\r\n");
return(1); /* Page answered if ESC */
}
}
}
}
}
}
return(0); /* Exit, page unanswered */
}
/******************************************************************************
*
* CHAT_MODE - Chat between local & remote
*
* process 1. If running local, exit
* 2. Test status
* 3. If nothing, goto 2
* 4. Get the char
* 5. If remote goto 8
* 6. Test if ESC
* 7. Exit if so
* 8. Echo the character
* 9. Goto 2
* input None
* output Returns 0
*****************************************************************************/
chat_mode()
{
long cur_time();
long time1;
long time2;
int i, j;
int key, keys;
char dim[5];
char bright[5];
int current;
char tbuff[80];
int index;
if(remote_user) /* If remote enable... */
{
if(user_graphics == 2) /* If ANSI is enabled... */
{
strcpy(dim, ""); /* ...set the ANSI codes */
strcpy(bright, "
");
}
else
{
strcpy(dim, "\0"); /* ...set the null codes */
strcpy(bright, "\0");
}
current = -1; /* Set to undefined state */
time1 = cur_time(); /* Save current time */
index = 0;
while(1) /* Do forever */
{
keys = 0;
while(keys == 0) /* Do until we get a key */
keys = io_status();
if(keys == 1) /* If local input... */
{
key = local_input(); /* ...get keyboard char */
if(key == 0x1b) /* ...test if terminating */
{
print_string("\r\nReturning to program...\r\n\r\n");
time2 = cur_time(); /* ...get time now */
if(time2 < time1) /* ...adjust if necessary */
time2 += DAY_SECONDS;
time2 -= time1; /* ...compute time in CHAT */
user_signon += time2; /* ...adjust users time */
user_signoff += time2;
return(0); /* ...exit if so */
}
}
else
key = modem_input(); /* Get modem char */
if(key != 0)
{
if(current != keys) /* If we need to change ints */
{
if(keys == 1)
print_string(bright); /* ...bright for SysOp */
else
print_string(dim); /* ...dim for user */
current = keys;
}
print_char(key); /* else echo it */
if(key == 0x0d) /* if carriage return */
{
print_char(0x0a); /* ...then echo line feed */
index = 0; /* ...and reset wrap index */
}
else if(key == 0x08) /* if a backspace */
{
if(index > 0) /* ...then adjust wrap index */
index--;
}
else if(key >= ' ') /* if a printable character */
{
tbuff[index] = key; /* ...then store it */
index++; /* ...and bump counter */
if(index == 79) /* if we need to word wrap */
{
i = index - 1; /* start with last char */
while((i > 0) && (tbuff[i] != ' '))
i--;
if(i > 0)
{
j = index; /* backup to start of word */
while(j > i)
{
print_char(0x08);
j--;
}
print_char(0x0d); /* new line */
print_char(0x0a);
j++; /* now print what we have */
i = index;
index = 0;
while(j < i)
{
print_char(tbuff[j]);
tbuff[index] = tbuff[j];
index++;
j++;
}
}
}
}
}
}
}
return(0); /* Exit */
}